package com.mas.admin.biz.service.users;

import com.mas.admin.biz.dal.dataobject.users.AdminUserDO;
import com.mas.admin.biz.model.vo.users.UserCreateReqVO;
import com.mas.admin.biz.model.vo.users.UserPageItemRespVO;
import com.mas.admin.biz.model.vo.users.UserPageReqVO;
import com.mas.admin.biz.model.vo.users.UserUpdateReqVO;
import com.mas.framework.common.pojo.PageResult;

import javax.validation.Valid;
import java.util.List;

/**
 * @author godyao
 * @description 后台用户 Service 接口
 * @date 2023年01月19日16:55
 */
public interface AdminUserService {
    /**
     * 创建用户
     *
     * @param reqVO 用户信息
     * @return 用户编号
     */
    Long createUser(@Valid UserCreateReqVO reqVO);

    /**
     * 通过用户 ID 查询用户
     *
     * @param id 用户ID
     * @return 用户对象信息
     */
    AdminUserDO getUser(Long id);

    /**
     * 通过 ID 更新用户信息
     * @author godyao
     * @param reqVO 用户信息
     * @return void
     * @date 2023/1/26 20:01
     */
    void updateUser(UserUpdateReqVO reqVO);

    /**
     * 删除用户
     * @author godyao
     * @param id 用户ID
     * @return void
     * @date 2023/1/26 20:11
     */
    void deleteUser(Long id);

    /**
     * 修改用户密码
     * @author godyao
     * @param id 用户ID
     * @param password 用户密码
     * @return void
     * @date 2023/1/26 20:15
     */
    void updateUserPassword(Long id, String password);

    /**
     * 修改用户状态
     * @author godyao
     * @param id 用户ID
     * @param status 用户状态
     * @return void
     * @date 2023/1/26 20:33
     */
    void updateUserStatus(Long id, Integer status);

    /**
     * 获得用户分页列表
     * @author godyao
     * @param reqVO 分页条件
     * @return 分页列表
     * @date 2023/1/26 21:02
     */
    PageResult<UserPageItemRespVO> getUserPage(UserPageReqVO reqVO);

    /**
     * 获得指定状态的用户们
     * @author godyao
     * @param status 状态
     * @return java.util.List<com.mas.admin.biz.dal.dataobject.users.AdminUserDO> 状态的用户们
     * @date 2023/1/27 11:34
     */
    List<AdminUserDO> getUsersByStatus(Integer status);

    /**
     * 通过用户名查询用户
     * @author godyao
     * @param username 用户名
     * @return com.mas.admin.biz.dal.dataobject.users.AdminUserDO 用户
     * @date 2023/1/28 23:10
     */
    AdminUserDO getUserByUsername(String username);
}
